<?php
declare(strict_types=1);

namespace Dreamcat\ConfigClient\Api;

use Dreamcat\ConfigClient\Popo\ApolloConfigResult;

/**
 * Apollo配置中心服务器接口
 * @author vijay
 */
interface ApolloServerInterface
{
    /**
     * 获取配置
     * @param string $appid 应用的appId
     * @param string $clusterName 集群名
     * @param string $namespaceName Namespace的名字
     * @param string $ip 应用部署的机器ip
     * @param string $releaseKey 上一次的releaseKey
     * @return ApolloConfigResult
     * @see https://github.com/ctripcorp/apollo/wiki/其它语言客户端接入指南#13-通过不带缓存的http接口从apollo读取配置
     */
    public function getConfig(
        string $appid,
        string $clusterName,
        string $namespaceName,
        string $ip = null,
        string $releaseKey = null
    ): ApolloConfigResult;

    /**
     * 应用感知配置更新
     * @param string $appid 应用ID
     * @param string $clusterName 集群名
     * @param array $notifications 键是namespace，值是最新的通知id
     * @return array 有变化的情况，键是namespace，值是最新的通知id
     * @see https://github.com/ctripcorp/apollo/wiki/其它语言客户端接入指南#14-应用感知配置更新
     */
    public function notifications(
        string $appid,
        string $clusterName,
        array $notifications
    ): array;
}

# end of file
